Skip to content

Add all Champions learnsets#1532

Open
SnorlaxMonster wants to merge 5 commits into
PokeAPI:masterfrom
SnorlaxMonster:champions-moves
Open

Add all Champions learnsets#1532
SnorlaxMonster wants to merge 5 commits into
PokeAPI:masterfrom
SnorlaxMonster:champions-moves

Conversation

@SnorlaxMonster
Copy link
Copy Markdown
Contributor

Change description

Add all Pokémon Champions learnsets. Data from https://github.com/projectpokemon/champout/blob/main/masterdata/waza_learn.json

Champions is just a battle sim where you can freely swap moves around, so it doesn't really have a concept of "methods" for learning moves. My solution was to define the new pokemon_move_method "null" at index 0. If it would be preferable to make this a new positive index number, or something else entirely, let me know and I can swap it over.

Notes:

  • In the game data, there are 261 entries (for 108 unique Pokémon and 61 unique moves) that are currently disabled. For example, Tsareena is currently coded to learn Magical Leaf, but Magical Leaf is disabled in Champions, so it can't actually be taught that move in-game, and if you transfer one in from HOME that knows Magical Leaf, it cannot use it. I have excluded those disabled moves from this PR, but I can add them if that would be preferred.
  • Hangry Mode Morpeko is missing 5 moves that Full Belly Mode Morpeko can learn. This has no impact on gameplay, as in the Box (where you can change its moves) it is always Full Belly Mode. All of the other in-battle-only forms have the same movesets as their base forms.
    • I've just left the raw game data as-is, as there doesn't currently appear to be a way to mark this kind of discrepancy in PokeAPI. The similar (but inverted) case in Sun and Moon where Busted Form Mimikyu learns Surf via TM while Disguised Form Mimikyu does not is not currently marked either.
  • Vivillon, Florges, Furfrou, Polteageist, Alcremie, and Sinistcha define separate move data for their different forms, although it is all identical. (In the case of Alcremie, Champions only defines separate learnsets for each cream, and does not distinguish between sweets.) PokeAPI does not define separate pokemon_id values for these forms, so I've had to condense these into single entries per Pokémon, but that doesn't make any functional difference.
  • Mega Meowstic has the same moves as the base form of Meowstic (which has different moves depending on its gender), but PokeAPI only assigns a single pokemon_id for Mega Meowstic. Since there's no good way to mark this, I've simply not included any moves for Mega Meowstic at all.

AI coding assistance disclosure

No AI was used in the creation of this PR.

Contributor check list

  • I have written a description of the contribution and explained its motivation.
  • [N/A] I have written tests for my code changes (if applicable).
  • I have read and understood the AI Assisted Contribution guidelines.
  • I will own this change in production, and I am prepared to fix any bugs caused by my code change.

@@ -1,4 +1,5 @@
id,identifier
0,null
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would say this is more of a move tutor situation. Plus, I don't think the API can handle IDs below 1. Making a local version of the database shows it assigns them to zygarde-cube instead.

@jemarq04
Copy link
Copy Markdown
Member

jemarq04 commented Jun 3, 2026

Mega Meowstic has the same moves as the base form of Meowstic (which has different moves depending on its gender), but PokeAPI only assigns a single pokemon_id for Mega Meowstic. Since there's no good way to mark this, I've simply not included any moves for Mega Meowstic at all.

Do you mean that Mega Meowstic has a different learnset depending on if it's male or female? If so, we should make a pokemon resource for each of them and add the relevant move data to each. Otherwise, we should add the move data to the single Mega Meowstic.

@SnorlaxMonster
Copy link
Copy Markdown
Contributor Author

SnorlaxMonster commented Jun 4, 2026

Mega Meowstic has the same moves as the base form of Meowstic (which has different moves depending on its gender), but PokeAPI only assigns a single pokemon_id for Mega Meowstic. Since there's no good way to mark this, I've simply not included any moves for Mega Meowstic at all.

Do you mean that Mega Meowstic has a different learnset depending on if it's male or female? If so, we should make a pokemon resource for each of them and add the relevant move data to each. Otherwise, we should add the move data to the single Mega Meowstic.

Yes. Like all Mega-Evolved Pokémon, Mega Meowstic has the exact same learnset as its base form. But male and female Meowstic have different learnsets, so male and female Mega Meowstic also have different learnsets.

Splitting Mega Meowstic

I've updated pokemon.csv, pokemon_form_names.csv, and pokemon_forms.csv to split Mega Meowstic into separate entries for male and female. I've reused the existing ID for male Mega Meowstic, meaning that female Mega Meowstic is not adjacent (it ends up at the bottom of the list instead). I've also inserted the Mega Meowstic moves I had removed earlier.

In the documentation for Pokémon forms, is_default is described as "True for exactly one form used as the default for each Pokémon." However, it seems like every single Mega-Evolved Pokémon is set to is_default in addition to its base form, and many other multi-form Pokémon have multiple forms flagged as is_default. I've set this field to True for female Mega Meowstic to mirror what all of the other Mega Evolutions are doing, but to me it seems like it should be False for all of the Mega-Evolved Pokémon.

order seems to want forms of the same species grouped together, but is also a simple incrementing integer with no gaps. As a result, to insert a new form of Meowstic I've had to increment the order field for every Pokémon after Meowstic in the National Pokédex. (IMO, this would be better handled similarly to what Champions does internally, where they just allocate the last 3 digits to the form ID and the first 4 to the National Pokédex number, so that inserting a new form doesn't require incrementing all of the others; e.g. Mega Venusaur is 0006001. However, changing that structure would belong in a separate PR, so I've just stuck to what is already there.)

The documentation does actually note "Multiple forms may have equal order, in which case they should fall back on sorting by name", so theoretically it may actually not be necessary to insert a new distinct order value for female Mega Meowstic, but that doesn't appear to be what is actually done in practice.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants